(* Lazy обертка над Hashtbl для экономии памяти. Память под рельный хешь
 * выделяется только при первом обращении. *)

type t 'a 'b = Lazy.t (Hashtbl.t 'a 'b);

value empty () = lazy (MHashtbl.empty ());

value is_empty t = not (Lazy.lazy_is_val t) || MHashtbl.is_empty (Lazy.force t);

value mem h e = Hashtbl.mem (Lazy.force h) e;

value add h e = Hashtbl.add (Lazy.force h) e;

value find h e = Hashtbl.find (Lazy.force h) e;

value remove h e = Hashtbl.remove (Lazy.force h) e;


value pop h e = MHashtbl.pop (Lazy.force h) e;


value iter f h = MHashtbl.iter f (Lazy.force h);

value clear h = MHashtbl.clear (Lazy.force h);
